{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import sys\n",
    "from torch import nn\n",
    "import torch.nn.functional as F\n",
    "sys.path.append(\"../\")\n",
    "from mymodel import utils\n",
    "from mymodel import Show\n",
    "import pickle\n",
    "import re"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "20956"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with open(\"./time_mechine.txt\",'r',encoding=\"utf-8\") as f:\n",
    "    lines = f.readlines()\n",
    "content = [re.sub(\"[^A-Za-z]+\",\" \",line).strip().lower() for line in lines] # 将不是A-Za-z中的一个或多个字符替换为空格\n",
    "tokens = utils.tokenize(content,\"char\") # tokens还是分行2d的\n",
    "tokens = tokens[:500]\n",
    "vocab = utils.Vocab(tokens) # 词库索引转token，token转索引\n",
    "corpus = [vocab[token] for line in tokens for token in line] # 数字表示的文本\n",
    "len(corpus)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size, num_steps = 32, 35\n",
    "device = utils.trygpu(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "class data_iter:\n",
    "    def __init__(self, corpus, use_random_iter=False) -> None:\n",
    "        self.random = use_random_iter\n",
    "        self.corpus = corpus\n",
    "    def __iter__(self):\n",
    "        if self.random:\n",
    "            return utils.seq_data_iter_random(self.corpus, batch_size, num_steps)\n",
    "        else:\n",
    "            return utils.seq_data_iter_seq(self.corpus, batch_size, num_steps)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_iter = data_iter(corpus)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_hidden = 256\n",
    "rnn_layer = nn.RNN(len(vocab), num_hidden)\n",
    "state = torch.zeros((1, batch_size, num_hidden)) # torch没用元组表示不同的东西，用的多维"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "class RNNModel(nn.Module):\n",
    "    def __init__(self, run_layer, vocab_size, *args, **kwargs) -> None:\n",
    "        super(RNNModel, self).__init__(*args, **kwargs)\n",
    "        self.rnn = rnn_layer\n",
    "        self.vocab_size = vocab_size\n",
    "        self.num_hiddens = self.rnn.hidden_size\n",
    "        # 兼容双向RNN\n",
    "        if not self.rnn.bidirectional:\n",
    "            self.num_directions = 1\n",
    "            self.linear = nn.Linear(self.num_hiddens, self.vocab_size)\n",
    "        else:\n",
    "            self.num_directions = 2\n",
    "            self.linear = nn.Linear(self.num_hiddens * 2, self.vocab_size)\n",
    "\n",
    "    def forward(self, inputs, state):\n",
    "        X = F.one_hot(inputs.T.long(), self.vocab_size) # 转置就是把时间放在前面\n",
    "        X = X.to(torch.float32)\n",
    "        Y, state = self.rnn(X, state)\n",
    "        # rnn的输出是（时间，批量，隐藏单元数）\n",
    "        # 用我们之前定义的linear层批量转化为输出\n",
    "        # 先reshape成为（时间*批量，隐藏单元数）\n",
    "        # 再通过线性层变成（时间*批量，词表容量）\n",
    "        output = self.linear(Y.reshape(-1, Y.shape[-1]))\n",
    "        return output, state\n",
    "    \n",
    "    def begin_state(self, device, batch_size = 1):\n",
    "        if not isinstance(self.rnn, nn.LSTM):\n",
    "            return torch.zeros((self.num_directions*self.rnn.num_layers,\n",
    "                                batch_size,\n",
    "                                self.num_hiddens),\n",
    "\n",
    "                                device=device)\n",
    "        else:\n",
    "            return (torch.zeros((\n",
    "                self.num_directions * self.rnn.num_layers,\n",
    "                batch_size, self.num_hiddens), device=device),\n",
    "                    torch.zeros((\n",
    "                        self.num_directions * self.rnn.num_layers,\n",
    "                        batch_size, self.num_hiddens), device=device))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'time traveller yi<unk>i<unk>i<unk>uinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn'"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "net = RNNModel(rnn_layer, len(vocab))\n",
    "net = net.to(device)\n",
    "utils.predictRNN(\"time traveller \", 50, net, vocab, device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 450x350 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time traveller s mose cononitht inget and we nat in suigen to yo\n",
      "困惑度 1.7 device:cuda:0\n",
      "time traveller proves abott burten wasbecco is past himvedory we\n",
      "traveller and therepit andwhard and mest co she could and a\n",
      "[trainRNN] run time :26.856674432754517 seconds\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 450x350 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "epochs, lr = 500, 1\n",
    "utils.trainRNN(10, net, train_iter, vocab, lr, epochs, device)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
